#include "mypushbutton.h"
#include <QDebug>
#include <QPropertyAnimation>   //动态

//MyPushButton::MyPushButton(QWidget *parent)
//    : QWidget{parent}
//{

//}

MyPushButton::MyPushButton(QString normalImg, QString pressImg)
{
    normalImage = normalImg;
    pressImage = pressImg;
    QPixmap pix;
    bool temp = pix.load(normalImage);
    if(!temp)
    {
        qDebug() << "图片加载失败";
        return;
    }
    //设置图片固定大小
    this->setFixedSize(pix.width(), pix.height());
    //设置不规则图片样式
    this->setStyleSheet("QPushButton{border:0px}");
    //设置图标
    this->setIcon(pix);
    //设置大小
    this->setIconSize(QSize(pix.width(), pix.height()));
}
//向下弹
void MyPushButton::moveDown()
{
    //创建动态对象
    QPropertyAnimation * animation = new QPropertyAnimation(this, "geometry");
    //设置动画时间
    animation->setDuration(200);

    //设置起始位置
    animation->setStartValue(QRect(this->x(), this->y(), this->width(), this->height()));
    //设置结束位置
    animation->setEndValue(QRect(this->x(), this->y() + 10, this->width(), this->height()));

    //设置弹跳曲线
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //执行动画
    animation->start();
}
//向上弹
void MyPushButton::moveUp()
{
    //创建动态对象
    QPropertyAnimation * animation = new QPropertyAnimation(this, "geometry");
    //设置动画时间
    animation->setDuration(200);

    //设置起始位置
    animation->setStartValue(QRect(this->x(), this->y(), this->width(), this->height()));
    //设置结束位置
    animation->setEndValue(QRect(this->x(), this->y() - 10, this->width(), this->height()));

    //设置弹跳曲线
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //执行动画
    animation->start();
}
//弹跳动画
void MyPushButton::move_down_up()
{
    //创建动态对象
    QPropertyAnimation * animation = new QPropertyAnimation(this, "geometry");
    //设置动画时间
    animation->setDuration(100);

    //设置起始位置
    animation->setStartValue(QRect(this->x(), this->y() + 10, this->width(), this->height()));
    //设置结束位置
    animation->setEndValue(QRect(this->x(), this->y(), this->width(), this->height()));

    //设置弹跳曲线
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //执行动画
    animation->start();
}
//重写按钮按下 和 释放事件
void MyPushButton::mousePressEvent(QMouseEvent *e)
{
    //按下图片不为空时，即需要在鼠标按下时切换图片
    if(this->pressImage != "")
    {
        QPixmap pix;
        bool temp = pix.load(this->pressImage);
        if(!temp)
        {
            qDebug() << "图片加载失败";
            return;
        }
        //设置图片固定大小
        this->setFixedSize(pix.width(), pix.height());
        //设置不规则图片样式
        this->setStyleSheet("QPushButton{border:0px}");
        //设置图标
        this->setIcon(pix);
        //设置大小
        this->setIconSize(QSize(pix.width(), pix.height()));
    }
    //让父类执行其他内容
    return QPushButton::mousePressEvent(e);
}
void MyPushButton::mouseReleaseEvent(QMouseEvent *e)
{
    //按下图片不为空时，即需要在鼠标松开时切换会原来图片
    if(this->pressImage != "")
    {
        QPixmap pix;
        bool temp = pix.load(this->normalImage);
        if(!temp)
        {
            qDebug() << "图片加载失败";
            return;
        }
        //设置图片固定大小
        this->setFixedSize(pix.width(), pix.height());
        //设置不规则图片样式
        this->setStyleSheet("QPushButton{border:0px}");
        //设置图标
        this->setIcon(pix);
        //设置大小
        this->setIconSize(QSize(pix.width(), pix.height()));
    }
    //让父类执行其他内容
    return QPushButton::mouseReleaseEvent(e);
}
